package com.wisdom.benefit.jufa.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 一些正则判断
 * Created by zhoudawei on 2016/12/6.
 */

public final class RegularUtil {

    /**
     * 用户名是否合法，规则：由长度6~16位的字母开头的字母、数字、下划线组成
     *
     * @param loginName 用户名
     * @return 是否合法
     */
    public static boolean isValidAccount(String loginName) {
        Pattern pattern = Pattern.compile("^[a-zA-Z][a-zA-Z0-9_]{5,15}$");
        Matcher matcher = pattern.matcher(loginName);
        return matcher.matches();
    }

    /**
     * 手机号是否合法，规则：1开头的11位数字
     *
     * @param mobileNumber 手机号
     * @return 是否合法
     */
    public static boolean isValidPhone(String mobileNumber) {
        Pattern pattern = Pattern.compile("^[1]\\d{10}");
        Matcher matcher = pattern.matcher(mobileNumber);
        return matcher.matches();
    }

    /**
     * 短信验证码是否合法，规则：6位数字
     *
     * @param smsCode 短信验证码
     * @return 是否合法
     */
    public static boolean isValidSmsCode(String smsCode) {
        Pattern pattern = Pattern.compile("^\\d{6}$");
        Matcher matcher = pattern.matcher(smsCode);
        return matcher.matches();
    }

    /**
     * 密码是否合法，规则：由长度6-20位的字母、数字、特殊符号中的至少两种组成
     *
     * @param password 密码
     * @return 是否合法
     */
    public static boolean isValidPassword(String password) {
        String regex = "^(?![A-Za-z]+$)(?!\\d+$)(?![\\W_]+$)\\S{6,20}$";
        return password.matches(regex);
    }

    /**
     * 姓名是否合法，规则：汉字
     *
     * @param name 姓名
     * @return 是否合法
     */
    public static boolean isValidName(String name) {
        Pattern pattern = Pattern.compile("^[\u4e00-\u9fa5]+((·|•)+[\u4e00-\u9fa5]+)*$");
        Matcher matcher = pattern.matcher(name);
        return matcher.matches();
    }

    /**
     * 身份证号是否合法
     *
     * @param cid 身份证号
     * @return 是否合法
     */
    public static boolean isValidCid(String cid) {
        Pattern pattern_15 = Pattern.compile("^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$");
        Matcher matcher_15 = pattern_15.matcher(cid);
        Pattern pattern_18 = Pattern.compile("^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X|x)$");
        Matcher matcher_18 = pattern_18.matcher(cid);
        return matcher_15.matches() || matcher_18.matches();
    }

    /**
     * 银行卡号是否合法，规则：16或19位数字
     *
     * @param cardNumber 银行卡号
     * @return 是否合法
     */
    public static boolean isValidBankCard(String cardNumber) {
        Pattern pattern = Pattern.compile("^\\d{16}|\\d{19}$");
        Matcher matcher = pattern.matcher(cardNumber);
        return matcher.matches();
    }
}
